home *** CD-ROM | disk | FTP | other *** search
Text File | 1995-02-11 | 1.3 KB | 73 lines | [TEXT/Mrls] |
- module: dylan-user
- author: Patrick C. Beard (beard@cs.ucdavis.edu)
- copyright: (C) 1994-1995 Patrick C. Beard
- All rights reserved.
- synopsis: demonstration of recursion alternatives.
- version: 1.0
-
- //
- // DIRM syntax implementations of recursive factorial and fibonacci functions.
- //
-
- define method fact (n :: <integer>) => <integer>;
- if (n = 0)
- 1;
- else
- n * fact(n - 1);
- end if;
- end method fact;
-
- define method fact-iter (n :: <integer>) => <integer>;
- let f = 1;
- for (i from 2 to n)
- f := f * i;
- finally
- f;
- end for;
- end method fact-iter;
-
- define method fact-acc (n :: <integer>) => <integer>;
- local method fact-helper (f, n)
- if (n = 1)
- f;
- else
- fact-helper(n * f, n - 1);
- end if;
- end method;
- fact-helper(1, n);
- end method fact-acc;
-
- define method fib (n :: <integer>) => <integer>;
- if (n = 0 | n = 1)
- 1;
- else
- fib(n - 2) + fib(n - 1);
- end if;
- end method fib;
-
- define method fib-iter (n :: <integer>) => <integer>;
- let (f0, f1, f) = values(1, 1, 1);
- for (i from 2 to n)
- f := f0 + f1;
- f0 := f1;
- f1 := f;
- finally
- f;
- end for;
- end fib-iter;
-
- define method fib-acc (n :: <integer>) => <integer>;
- if (n = 0 | n = 1)
- 1;
- else
- local method fib-helper (f0, f1, n)
- if (n = 2)
- f0 + f1;
- else
- fib-helper (f1, f0 + f1, n - 1);
- end if;
- end method;
- fib-helper(1, 1, n);
- end if;
- end method fib-acc;
-